package com.ruoyi.merchant.mapper;

import com.ruoyi.merchant.domain.MessageSession;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Date;

/**
 * 消息会话Mapper接口
 */
@Mapper
@Repository
public interface MessageSessionMapper {
    /**
     * 查询消息会话
     */
    MessageSession selectMessageSessionBySessionId(String sessionId);

    /**
     * 查询消息会话列表
     */
    List<MessageSession> selectMessageSessionList(MessageSession messageSession);

    /**
     * 新增消息会话
     */
    int insertMessageSession(MessageSession messageSession);

    /**
     * 修改消息会话
     */
    int updateMessageSession(MessageSession messageSession);

    /**
     * 批量删除消息会话
     */
    int deleteMessageSessionBySessionIds(String[] sessionIds);

    /**
     * 删除消息会话信息
     */
    int deleteMessageSessionBySessionId(String sessionId);

    /**
     * 统计未读顾客消息数
     */
    int countUnreadCustomerMessages(@Param("merchantId") String merchantId);

    /**
     * 统计未读平台消息数
     */
    int countUnreadPlatformMessages(@Param("merchantId") String merchantId);

    /**
     * 统计未读群消息数
     */
    int countUnreadGroupMessages(@Param("merchantId") String merchantId);

    /**
     * 根据商家ID和消息类型查询会话列表
     */
    List<MessageSession> selectSessionsByMerchantId(@Param("merchantId") String merchantId, @Param("msgType") String msgType);

    /**
     * 检查会话访问权限
     */
    boolean checkSessionAccess(@Param("merchantId") String merchantId, @Param("sessionId") String sessionId);

    /**
     * 更新会话最后消息
     */
    void updateLastMessage(@Param("sessionId") String sessionId, @Param("content") String content, @Param("sentAt") Date sentAt);

    /**
     * 更新会话未读计数
     */
    void updateUnreadCount(@Param("sessionId") String sessionId);
}